<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>

    let message = 'abcde'
    // 1.charAt() 返回第n个位置的字符
    //    charCodeAt() 返回第n个位置的编码
    console.log(message.charAt(2)) // c
    console.log(message.charCodeAt(2)) // 99

    // 2.normalize() 不常用,不介绍

    // 3.3字符串操作方法
    // 3.3.1 concat() 拼接字符串,接收任意多个字符串
    let stringValue = 'hello '
    let result = stringValue.concat('world')
    console.log(result) // hello world
    console.log(stringValue) // hello

    let value = 'hello world'
    // 3.3.2 slice() 开始位置到结束位置   负值的时候,当成(value.length+这个负值)
    console.log(value.slice(3)); // 'lo world'
    console.log(value.slice(-3)); // 'rld'
    // substring()  开始位置到结束位置   负值的时候,把负值当成0
    console.log(value.substring(3))// 'lo world'
    console.log(value.substring(-3))// 'hello world'
    // substr()  // 不推荐使用 开始位置,截取多少个
    console.log(value.substr(3))// 'lo world'

    // 3.4 字符串位置方法
    // indexOf()  找开头找,找到返回位置,没有返回-1,第二个参数表示从哪个位置开始找
    console.log(value.indexOf('o')) // 4
    // lastIndexOf  从结尾找,找到返回位置,没有返回-1,第二个参数表示从哪个位置开始找
    console.log(value.lastIndexOf('o')) // 7

    // 3.5 字符串包含 startsWith()、 endsWith()和 includes(),返回boolean类型
    // startsWith()和 includes()方法接收可选的第二个参数，表示开始搜索的位置
    console.log(value.startsWith('he')) // true
    console.log(value.startsWith('wor',6)) // true
    console.log(value.includes('ll')) // true
    console.log(value.includes('ll',6)) // false
    // endsWith()方法接收可选的第二个参数，表示应该当作字符串末尾的位置
    console.log(value.endsWith('ld'));// true
    console.log(value.endsWith('ll',4)) // true

    // 3.6 trim() 删除空格  同理trimLeft() trimRight()
    let newValue = ' hello world '
    console.log(newValue.trim())
    console.log(newValue.trimLeft())
    console.log(newValue.trimRight())

    // 3.7.repeat() 表示要将字符串重复多少次
    console.log(value.repeat(2)) // hello worldhello world

    // 3.8 padStart() padEnd() 默认空格填充,第一个表示总长度多少,第二个表示用什么填充
    let padValue = 'foo'
    console.log(padValue.padEnd(6,'.'))

    // 3.9 字符串迭代与结构
    let iMessage = 'abc'
    console.log([...iMessage]) // [a,b,c]
    for(const c of iMessage){
        console.log(c)      // a b c
    }
    // 获取迭代器
    let stringIterator = iMessage[Symbol.iterator]();
    console.log(stringIterator.next()) // {value:'a',done:false}
    console.log(stringIterator.next())
    console.log(stringIterator.next())
    console.log(stringIterator.next())// {value:undefined,done:true}

    // 3.10 字符串大小写转换  还有toLocaleLowerCase
    console.log(value.toLowerCase())
    console.log(value.toLocaleLowerCase())
    console.log(value.toUpperCase())
    console.log(value.toLocaleUpperCase())

    // 3.11 字符串匹配  正则不想看
    // match() exec() replace() split()    split这个可以简单的使用使用
    let beSplitValue = 'a,b,c'
    console.log(beSplitValue.split(',',2)) // [a,b]

    // 3.12 localCompare() 在前面返回-1,相等0,后面1
    let compareValue = 'yellow'
    console.log(compareValue.localeCompare('b')) // 1
    console.log(compareValue.localeCompare('yellow')) // 0
    console.log(compareValue.localeCompare('z')) // -1

</script>
</body>
</html>